1
2
目次
利用製品 ... 1
アイコンの説明 ... 1
第 1 章 イントロダクション ... 3
ArcGIS Pro SDK とは ... 5
演習 1A: 環境設定 ... 7
ArcGIS Pro のインストール ... 7
ArcGIS Pro SDK for .NET のインストール ... 7
演習 1B: データの準備と事前処理 ... 9
データ保存先フォルダーの作成 ... 9
全国市区町村界データのダウンロード ... 9
ArcGIS Pro の起動とサイン イン ... 11
マップの追加とプロジェクトのオプション設定 ... 14
ファイル ジオデータベースにデータを変換 ... 16
第 2 章 ArcGIS Pro SDK の 基本操作 ... 21
DAML の基本 ... 23
演習 2A: DAML の操作方法 ... 27
アドイン モジュールのプロジェクト作成 ... 27
リボンをカスタマイズ... 31
コマンドを追加 ... 32
動作のテスト ... 34
マップ タブの修正 ... 35
コンディションとステートの作成 ... 36
コンディションとステートを使用した表示の切り替え ... 39
演習のまとめ... 40
解答コード ... 41
演習 2B: フック アドイン コマンドの作成 ... 44
リボンの作成 ... 44
フック アドイン ボタンの作成 ... 45
ArcGIS Pro のアドインのアンインストール ... 51
演習のまとめ... 52
解答コード ... 53
第 3 章 テンプレートを使用 したアドインの作成 ... 55
ArcGIS Pro SDK for .NET のテンプレート ... 57
演習 3A: プロジェクト マップ アイテム数とフィーチャ レイヤー数の取得 ... 59
プロジェクト アイテム数を取得 ... 59
3
プロジェクトにデータベースを追加 ... 65
演習のまとめ... 68
解答コード ... 69
演習 3B: プロジェクトアイテムのコンテキストメニューの修正 ... 71
コンテキスト メニューにボタンを移動 ... 71
コンテキスト メニュー項目の追加 ... 73
演習のまとめ... 79
解答コード ... 80
第 4 章 マップ ビューとの 対話 ... 83
マップ ツール ... 85
演習 4: カスタム マップ ツールの作成 ... 87
カスタム マップ ツールの作成 ... 87
プロジェクトにデータベースを追加 ... 91
フィーチャ数のカウントとズーム ... 92
演習のまとめ... 94
解答コード ... 96
第 5 章 補足資料 ... 99
Web サイト ...101
1
はじめに
このガイドは、ArcGIS Pro SDK を使用して、ArcGIS Pro アプリケーションの拡張方法を学
ぶためのチュートリアルです。ArcGIS Pro でどのような開発が行えるかを演習形式で理解して
いただけます。
利用製品
このガイドを利用するには、下記の製品をお持ちである必要があります。
ArcGIS Pro 2.0 以上 (Basic、Standard、Advanced のいずれでも動作) Visual Studio 2015 もしくは Visual Studio 2017
(Professional、Enterprise、Community エディション)
※本ドキュメントは Visual Studio 2015 を使用して操作しています。
アイコンの説明
演習時間:演習時間の目安です。
ノート:特定のトピック、手順に関する追加の情報、例外事項や特記事項を示します。
ティップス:概念の理解や手順を実行するための簡単なヘルプです。
外部リソース:トピックに関する参考資料です。
ベスト プラクティス:目的や優先事項を効率よく達成するためのガイドラインです。
3
5
ArcGIS Pro SDK
とは
ArcGIS Pro SDK は、ArcGIS Pro デスクトップ アプリケーションをカスタマイズするため
のソフトフェア開発キット (Software Development Kit) です。ArcGIS Pro で使用可能な UI を独自にアドインとして作成し、データの解析や編集を行うことができます。
ArcGIS Pro SDK は、モジュール、XML ベースの設定ファイル、テンプレートを追加したと
きに作成されるコード ファイルの 3 つのコンテンツによって構成されます。作成したアドイ
ンは .esriAddinX という拡張子のついたファイルにパッケージ化されるため、ユーザー間で簡
単に共有できます。
ArcGIS Pro SDK で提供される API は、ArcGIS for Desktop や ArcGIS Engine の開発で使用
する ArcObjects とは異なるため、既存のコードを ArcGIS Pro SDK で利用することはできませ
ん。また、スタンドアロン アプリケーションの作成はサポートされていません。
ArcGIS Pro SDK
とは
•
ArcGIS Pro
アプリケーションの拡張アドインを作成する
ためのソフトウェア開発キット
-
.NET
(
C#
、
VB
)を使用
-
WPF
と
XAML
で
UI
を作成
-
Visual Studio
のプロジェクト テンプレート ウィザードを使用
- 作成したアドインは、
.esriAddinX
ファイルにパッケージ化
•
以下のコンテンツで構成
- 設定ファイル(
Config.daml
)
6
スタートアップ ガイドでは、ArcGIS Pro 2.0 SDK を使用しアドインを作成していきます。2.0 以
前でアドインを作成し、ArcGIS Pro 2.0 でアドインを実行する場合、アドインの構成の変更と再
コンパイルが必要となります。手順につきましては、下記 FAQ をご参考ください。
・ArcGIS Pro SDK: バージョン 2.0 への移行ガイド
https://esrij-esri-support.custhelp.com/app/answers/detail/a_id/7168
・ArcGIS Pro SDK : バージョン 2.0 への移行方法
7
演習
1A:
環境設定
ArcGIS Pro SDK for .NET を利用するには、事前に実行環境である ArcGIS Pro がインスト
ールされている必要があります。事前準備として、ArcGIS Pro のインストール、そして ArcGIS Pro SDK for .NET のをインストールします。
演習時間: 10 分
ArcGIS Pro
のインストール
ArcGIS Pro のソフトウェア インストール要件については、下記 URL を参照してください。
ArcGIS Pro 2.0のシステム要件
http://pro.arcgis.com/ja/pro-app/get-started/arcgis-pro-system-requirements.htm
ソフトウェアのダウンロードとインストール方法は、下記 URL を参照してください。
ArcGIS Pro 2.0
https://esrij-esri-support.custhelp.com/app/answers/detail/a_id/7124
ArcGIS Pro をインストールするには、Esri 製品サポート サイトにアクセスし、ログインする必要
が あ り ま す 。 ア カ ウ ン ト を お 持 ち で な い 場 合 は 、Esri 製 品 サ ポ ー ト ト ッ プ ペ ー ジ (https://www.esrij.com/support/esri/) を参照してください。
ArcGIS Pro SDK for .NET
のインストール
ArcGIS Pro SDK for .NET のソフトウェア インストールのシステム要件については、下記 URL を参照してください。
ArcGIS Pro 2.0 SDK for .NET 要件
https://www.esrij.com/products/arcgis-desktop/environments/arcgis-pro/
ソフトウェアのインストール手順は、下記 URL の「任意インストール プログラム」項目の
「ArcGIS Pro SDK for .NET」を参照してください。
ArcGIS Pro SDK for .NET インストールガイド (v2.0)
8
Visual Studio 2015 では、ArcGIS Pro SDK の自動更新がデフォルトでオンとなっています。 ArcGIS Pro と ArcGIS Pro SDK のバージョンが異なると、アドインのビルドにてエラーが発生し
てしまいます。そのため、自動更新をオフにすることを推奨いたします。Visual Studio で、[ツー
ル] メニュー → [オプション] → [環境] → [拡張機能と更新プログラム] から [拡張機能を自動
的に更新する] のチェックを外し、[OK]をクリックすることで、自動更新をオフに設定することが
可能です。
9
演習
1B:
データの準備と事前処理
この演習では、本ガイドの演習で使用するデータをダウンロードし、実行可能な形式に編集し ます。
演習時間: 20 分
データ保存先フォルダーの作成
このステップでは、演習で使用するデータの保存先フォルダーを作成します。
C:\ に「ProSdkStartUpGuide」フォルダーを作成します。
さらに「C:\ProSdkStartupGuide」フォルダー内に、下記のフォルダーを作成します。
Downloads Mapx ProAddins Projects
この演習のためにダウンロードしたデータは、「Downloads」フォルダーに保存しましょう。
また、このガイドではダウンロードしたデータをファイル ジオデータベースのフィーチャクラ スに変換して演習を行います。
全国市区町村界データのダウンロード
ESRI ジャパンの Web サイトからサンプル データとして提供している、全国市区町村界デ
ータをダウンロードします。このデータは、演習 3 と演習 4 で使用します。
Web ブラウザーを開き、下記 URL にアクセスします。
ESRIジャパン 全国市区町村界データ
10
[ファイルのダウンロード] をクリックし、内容を確認してから [同意する] にチェックを
入れ、[全国市区町村界データのダウンロード] をクリックします。
[名前を付けて保存] を選択し、「C:\ProSdkStartupGuide\Downloads」フォルダーに、
「japan_ver81.zip」と名前を付けて保存してください。
Windows エクスプローラーを開き、ダウンロードしたファイルが保存されたディレクトリ
の「C:\ProSdkStartupGuide\Downloads」に移動します。
「japan_ver81.zip」をで右クリックし、[すべて展開] をクリックします。
[圧縮 (ZIP 形式) フォルダーの展開] ダイアログが表示されたら、[完了時に展開されたフ
11 展開されているのを確認し、Windows エクスプローラーを閉じます。
ArcGIS Pro
の起動とサイン
イン
ArcGIS Pro を利用するためには、ArcGIS Online の組織向けアカウントで ArcGIS Online
にサイン インする必要があります。ArcGIS Online にサイン インすることで、ArcGIS Online
上のマイ コンテンツや組織内のコンテンツ、または世界中に公開されているコンテンツにアク セスできるようになります。データの公開や共有にも ArcGIS Online へのサイン インが必要
となります。
ArcGIS Pro を起動します。
Windows [スタート] メニュー → [すべてのプログラム] → [ArcGIS] → [ArcGIS Pro]
→ [ArcGIS Pro]
ArcGIS Oline へのサイン インをしていない場合、[ArcGIS サイン イン] ウィンドウが表
12
すでに ArcGIS Online にサイン インをしている場合は、ArcGIS Pro の右上に ArcGIS Online
のユーザー名が表示されます。
[新しいプロジェクトの作成] から [空のプロジェクト] テンプレートを選択します。
「C:\ProSdkStartupGuide\Projects」フォルダー内に、「ExerciseData」という名前でプ
ロジェクトを保存します。
何もレイヤーを含まない、新しいプロジェクトが開きます。空のプロジェクトを開くのは、
ArcMap 上で空のドキュメントを開くのに似ていますが、事前に名前をつけてプロジェクトを
保存する点が異なります。ArcMap とのインターフェイスの違いを確認してください。ArcGIS Pro では、ツールバーやメニューではなく Microsoft Office 製品で見られるようリボン イン
13
新しいプロジェクトを作成すると、プロジェクトに関連するファイルやデータを格納するた めのフォルダーが自動的に作成されます。
次に、プロジェクトのフォルダーを確認します。
Windows のエクスプローラーにて、「C:\ProSdkStartupGuide\Projects」フォルダーを
開きます。
「ExerciseData」プロジェクトを作成すると同時に、「ExerciseData」フォルダーが作成され
ます。
プロジェクト フォルダー配下には、以下のファイルやフォルダーが自動的に作成されます。
14
プロジェクトで扱うデータは、この <プロジェクト名>.gdb ジオデータベースに保存するこ
ともできますし、別の既存のジオデータベースに格納することもできます。
Windows エクスプローラーを閉じます。
マップの追加とプロジェクトのオプション設定
空のプロジェクトには、何もマップが追加されていません。まずはマップを追加しましょう。
リボン インターフェイスの [挿入] タブを選択し、[新しいマップ] のアイコンをクリック
するか、またはドロップダウンから [新しいマップ] を選択し、プロジェクトにマップを挿
入します。
15
画面左側の [コンテンツ] ウィンドウで、マップという名前で追加されたツリーが 1 つの独
立したマップを表します。ArcGIS Pro では、このマップの中に複数のレイヤーを格納していく
ことができます(ArcMap のデータ フレームと似ています)。また、1 つのプロジェクトの中
に複数のマップを作成することもできます。
新しいプロジェクトの作成で、[Map.aptx] テンプレートを選択すると、最初から背景地図が挿入
されているプロジェクトを開くことができます。
続いて、プロジェクトのオプション設定を行います。ArcMap では、マップについてのプロパ
ティ設定(選択色やメタデータの形式など)を [ArcMap オプション] から行っていました。 ArcGIS Pro では、マップ単位ではなくプロジェクト単位でプロパティを設定します。
[プロジェクト] タブ から [オプション] を選択します。
[現在の設定] の [デフォルト ジオデータベース] に、ステップ 3 で作成されたプロジェ
16
デフォルト ジオデータベースを変更する場合は、[プロジェクト] の [現在の設定] のデフォルト
ジオデータベースを設定してください。[アプリケーション] の [一般] から設定してしまうと、今
後作成するすべてのプロジェクトに設定が適用されてしまいます。
次に、ジオプロセシング ツールが、既存のデータセットを上書きするように設定されている ことを確認します。
[ジオプロセシング] に移動し、[ジオプロセシング ツールが既存のデータセットを上書き
することを許可] にチェックが入っていることを確認します。
[OK] をクリックし、画面左上の ボタンでマップに戻ります。
これでプロジェクトの基本的な設定ができました。続いて、ダウンロードしたシェープファイ ルのデータを、ファイル ジオデータベースのフィーチャクラスに変換します。
ファイル
ジオデータベースにデータを変換
ステップ 2 でダウンロードした「japan_ver81.shp」を、ファイル ジオデータベースのフ
ィーチャクラスに変換します。
シェープファイルは仕様がオープンになっており、ArcGIS 以外のソフトウェアでも読み書き
ができるなど、GIS データをファイルとして公開する場合には便利なものです。しかし、基本
設計が古く、大量のデータやネットワーク データセットのように、複雑なデータ モデルを必要 とする要件には対応できません。また、格納可能な文字数など制限も多く、必ずしも最適なフォ ーマットとは言えません。
ファイル ジオデータベースは、シェープファイルの欠点を補う、ArcGIS ネイティブのデー
タ形式です。ArcGIS Pro では、デフォルト ジオデータベースとしてあらかじめプロジェクト
17
ェープファイルのデータをファイル ジオデータベースのフィーチャクラスとしてインポートし、 使用することにします。
[カタログ] ウィンドウの [データベース] を展開し、「ExerciseData.gdb」があることを
確認します。
[解析] タブの [ツール] をクリックします。
[ジオプロセシング] ウィンドウが表示されたら、[ツールの検索] に「フィーチャクラス」
と入力し、ツールを検索します。
18
[フィーチャクラス → フィーチャクラス] ダイアログで以下の設定を行い、[実行] をクリ
ックします。
入力フィーチャ :
C:\ProSdkStartupGuide\Downloads\japan_ver81\japan_ver81.shp 出力場所 : ExerciseData.gdb (既定値)
出力フィーチャクラス : japan_ver81
操作が完了すると、「ExerciseData.gdb」内に「japan_ver81」フィーチャクラスが作成され
ます。また、マップ上および [コンテンツ] ウィンドウに「japan_ver81」データがレイヤーと
19 左上のクイック アクセス ツールバーの [保存] をクリックし、プロジェクトを保存します。
ArcGIS Pro を終了します。
21
第
2
章
ArcGIS Pro SDK
の
23
DAML
の基本
DAML とは ArcGIS Pro Desktop Application Markup Language の略で、XML 構文を使
い、ArcGIS Pro の UI を定義します。また、モジュールの変更や削除もできます。
DAML
を使用して
UI
をカスタマイズ
•
設定ファイル(
Config.daml
)
-
XML
構文を使用
-
ArcGIS Pro
の
UI
を定義
24
ArcGIS Pro の UI を定義する際に呼び出すルート図です。上記のスライドの図は、演習で使
用する DAML の要素のみを書き出したものです。
演習で使用する DAML 要素 説明
AddInInfo プロジェクトに関する基本情報を定義
conditions 特定の要素と特定の状況の側面を結びつける 条件と実行を定義
modules タブやボタンなどの変更や削除を定義
ArcGIS 要素のルート図の詳細は、下記 URL をご参照ください。
ArcGIS Element
https://pro.arcgis.com/en/pro-app/sdk/api-reference/index.html#topic13494.html
25
演習で使用するコードファイルの説明:
コンディションとステート
コーディングを単純化。 (例:ボタンは [example_state_condition] が満たされたときに
のみ有効になる)
コンディション DAML で宣言し、特定の要素とステートを結びつける条件を
作り、実行するために使用します。not、and、or を使い、
複雑な条件を作成できる。
ステート アプリケーションの状態に名前を付けたもので、特定の状況の 側面をコードでアクティブにするか、非アクティブにするかの 切り替えができる。
フック コマンド
任 意 の ArcGIS Pro コ ン ト ロ ー ル を ICommand で 取 得 し 、Framework の GetPluginWrapper() メソッドを用いたアドインを使用。
コードファイル
•
コンディションとステート
27
演習
2A:
DAML
の操作方法
この演習では、DAML を使用し、ArcGIS Pro 既存の要素や新規に作成した要素をカスタマイ
ズします。
演習時間: 40 分
演習のポイント :
新しい要素の追加 (タブ、グループ、ボタン) リボンのカスタマイズ
コンディションとステートの使用.
アドイン
モジュールのプロジェクト作成
Visual studio 2015 を起動します。
[ファイル] メニュー → [新規作成] → [プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログから、[インストール済み] → [テンプレート] → [Visual C#] → [ArcGIS] → [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro モジュール
アドイン] テンプレートを選択します。
下記の項目を設定し [OK] ボタンをクリックしてプロジェクトを新規に作成します。
.NET Framework のバージョン : .NET Framework 4.6.1 名前 : WorkingWithDAML
場所 : C:\ProSdkStartupGuide\ProAddins\ ソリューションのディレクトリを作成 : チェックを外す
[ソリューションのディレクトリを作成] チェック ボックスをオンにすると、選択したディレクト
28
新規プロジェクトが作成されます。プロジェクトの起動時に、「Config.daml」ファイルが開
きます。アドイン モジュールのコードは、「Module1.cs」ファイルに含まれています。
まずは、「Module1.cs」ファイルにあらかじめ用意されているコードを確認しておきましょう。
[ソリューション エクスプローラー] から [Module1.cs] をクリックして開きます。
internal class Module1 : Module {
private static Module1 _this = null; /// <summary>
/// Retrieve the singleton instance to this module here /// </summary>
public static Module1 Current {
get {
return _this ?? (_this = (Module1)
FrameworkApplication.FindModule("WorkingWithDAML_Module")); }
} }
Module1 クラスには、シングルトンである自身のインスタンスを参照するプライベート変数
(_this)、およびその参照を取得するための get アクセサーを含む静的プロパティ(Current)
が用意されています。
Current プロパティの get アクセサーでは、FrameworkApplication の FindModule メソ
ッドの引数「WorkingWithDAML_Module」という文字列を渡し、モジュールのインスタンスを
取得しています。この文字列は "WorkingWithDAML" というプロジェクト名から自動生成され
29
また、このクラスは ArcGIS Pro SDK に含まれる Module 抽象クラスを継承しており、デ
フォルトで [Module1] という名前が設定されています。名前空間は、新規プロジェクト ダイ
アログで入力した「WorkingWithDAML」です。今回は「Module1.cs」ファイルには何も変更
を加えませんが、アドインでアプリケーションからのイベントを取得して独自の処理を行ない たい場合などは、Module 抽象クラスから継承した様々なイベント ハンドラーをオーバーライ
ドして実装できます。
次に、「Config.daml」ファイルを見てみましょう。
[ソリューション エクスプローラー] から [Config.daml] をクリックして開きます。
insertModule タグには、ID 属性として「WorkingWithDAML_Module」が付与されており、
「Module1.cs」ファイル内で FindModule メソッドに渡している ID と一致します。また、 className 属性にはモジュールのクラス名である [Module1] が指定されています。
<modules>
<insertModule id="WorkingWithDAML_Module" className="Module1"
autoLoad="false" caption="Module1"> ・・・
</insertModule> </modules>
次に、今後のコーディングをやり易くするためのファイルを作成します。
[ソリューション エクスプローラー] から [WorkingWithDAML] プロジェクトを右クリ
ックし、[ArcGIS Pro の DAML ID を生成] を選択します。
30
このファイルの作成は必須ではありませんが、ArcGIS Pro に元々用意されている各コマンド (ボタン、ドッキング ウィンドウ、ツールなど) の文字列を、静的な文字列プロパティとして定
義したものです。これにより、手動で文字列の ID を入力する必要なく Visual Studio の入力
支援機能であるインテリセンスの機能を使用し、既存のコマンドにアクセスするコードが記述 できます。
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
[エラー一覧] で表示されている[必要な属性 ’keytip’ が見つかりません。] の警告は、キーヒント
属性を入力していないために表示されるものです。キーヒントは、リボン上にオーバーレイとして 表示されるキーボードのヒントで、表示されるキーを押すとプログラムの機能にアクセスすること ができます。Alt キーを押すと、ヒントと関連付けられたコマンドを実行できるキーボード文字が
表示されます。キーヒントは必須パラメーターですが、必要としない場合はこの警告は無視をして も構いません。キーヒント属性に空の値を入れると警告は消えます。
エラーが発生する場合は、ArcGIS Pro SDK for .NET が正しくインストールされているか確認し
31
リボンをカスタマイズ
このステップではリボンのカスタマイズとして、1 つのタブに 2 つのグループを作成し、追
加します。
「タブ」は、[マップ] や [挿入] など、リボン上で切り替える対象のメニューを指し、「グループ」
とは、それぞれのタブに含まれるツールやコマンドをまとめたものです。各タブは 1 つ以上のグル
ープを含みます。
「Config.daml」ファイルを開き、tabs 要素を探します。insertModule 要素内の、1 番目
の子要素です。
tabs 要素には、あらかじめ tab 要素が 1 つ、コメントアウトされた状態で用意されていま
す。tab には子要素として 1 つ以上の group を設定します。各グループにどのようなツール
やコマンドを含めるかは、別途 groups 要素内の group 要素で定義するため、ここでは refID
属性で group 要素への参照のみを指定します。
tab 要素のコメントを解除し、caption 属性を「演習 2A タブ」に変更します。
<tabs>
<tab id="WorkingWithDAML_Tab1" caption="演習 2A タブ">
<group refID="WorkingWithDAML_Group1"/> </tab>
</tabs>
複数行をコメント アウトする場合、[テキスト エディター] ツールバーの [選択範囲のコメント
を解除] ボタンをクリック、または Ctrl キーを押しながら 'K' と 'C' を押すと簡単で便利です。
続けて groups 要素内の group 要素へ移動し、下記のように変更します(group の id が、
先ほど tab 要素内で参照していた group の refID と一致していることに注目してくだ
さい)。また、前のステップで group 要素を配置する指定のタブを作成したので、group
要素内の appearsOnAddInTab の値は false に設定します。 caption : 演習 2A グループ 1 appearsOnAddInTab : false
<groups>
<!-- comment this out if you have no controls on the Addin tab
to avoid an empty group--> <group id=”WorkingWithDAML_Group1” caption=”演習 2A グループ 1”
appearsOnAddInTab="false"> <!--host controls within groups -->
32
appearsOnAddInTab の値を true で定義することによって、リボン内に [アドイン] タブが自動
に作成され、グループが配置されます。
さらに、前のコードに続けて、「WorkingWithDAML_Group2」グループを作成します。 groups 要素内で、「WorkingWithDAML_Group1」グループをコピー&ペーストで複製し、 id および caption の値を書き換えます。
id : WorkingWithDAML_Group2 caption : 演習 2A グループ 2
<group id="WorkingWithDAML_Group2" caption="演習 2A グループ 2"
appearsOnAddInTab="false"> </group>
これで、タブ内に設定できるグループが 2 つになりました。
次に、再度「演習 2A タブ」タブを修正し、2 つ目のグループ「演習 2A グループ 2」を追
加しましょう。
tab 要素内に、「WorkingWithDAML_Group2」グループを参照する、新しい group 要素
を追加します。refID 属性には追加したいグループの id を設定します。
<tabs>
<tab id="WorkingWithDAML_Tab1" caption="演習 2A タブ">
<group refID="WorkingWithDAML_Group1"/> <group refID="WorkingWithDAML_Group2"/>
</tab> </tabs>
ID の指定は大文字・小文字を区別します。間違えないように注意しましょう。
コマンドを追加
DAML にはコマンドやメニュー、グループといったコアな要素があり、「Config.daml」ファ
イルに記述することで UI の追加や更新、削除ができます。コマンドのボタンやグループを自分
で作ることもできますが、ID を参照することで、別の既存のコマンドやグループを、新規ある
いは既存のタブに挿入するといったこともできます。
このステップでは、ステップ 2 で作成したアドイン内のグループに、ArcGIS Pro の既存の
コマンドを追加します。また、「演習 2A タブ」に別の既存コマンド グループを追加します。
「Config.daml」ファイルを開き、「WorkingWithDAML_Group1」グループの group 要
33 「WorkingWithDAML_Group1」グループに、ArcGIS Pro の既存コマンドへの参照を追加
します。コードの例を参考にして、「host controls within groups」というコメントの書か
れた行の後にツールパレット、ボタン、ギャラリーの要素を追記しましょう。
refID 属性に下記の既存コマンドの ID を指定し追加します。
追加する既存コマンド 説明
esri_mapping_newMapPalette [新しいマップ] ツールパレット esri_core_saveProjectAsButton [名前を付けてプロジェクトを保存] ボタン
esri_mapping_bookmarksNavigateGallery [ブックマーク] ギャラリー esri_mapping_mapContextMenu_ExportMap [マップのエクスポート] ボタン
<group id="WorkingWithDAML_Group1" caption="演習 2A グループ 1"
appearsOnAddInTab="false"> <!-- host controls within groups -->
<!--Pro 既存コマンド-->
<toolPalette refID="esri_mapping_newMapPalette" />
<button refID="esri_core_saveProjectAsButton" />
<gallery refID="esri_mapping_bookmarksNavigateGallery" /> <button refID="esri_mapping_mapContextMenu_ExportMap" />
</group>
「WorkingWithDAML_Group2」グループにも同様に、下記の既存コマンドの ID を指定
し追加します。
追加する既存コマンド 説明
esri_mapping_selectToolPalette [選択] ツールパレット esri_mapping_clearSelectionButton [選択解除] ボタン
esri_geoprocessing_selectByAttributeButton [属性検索] ボタン esri_geoprocessing_selectByLocationButton [空間検索] ボタン
<group id="WorkingWithDAML_Group2" caption="演習 2A グループ 2"
appearsOnAddInTab="false"> <!--host controls within groups -->
<!--Pro 既存コマンド-->
<toolPalette refID="esri_mapping_selectToolPalette" />
<button refID="esri_mapping_clearSelectionButton" />
<button refID="esri_geoprocessing_selectByAttributeButton" /> <button refID="esri_geoprocessing_selectByLocationButton" />
</group>
既存コマンドの ID は下記 URL のリファレンス ページを参照してください。 ArcGIS Pro DAML ID Reference
https://github.com/Esri/arcgis-pro-sdk/wiki/ArcGIS-Pro-DAML-ID-Reference
次に、tab 要素内に既存のコマンド グループである [照会] グループの ID を追加します。
<tabs>
<tab id="WorkingWithDAML_Tab1" caption="演習 2A タブ">
34
<group refID="esri_mapping_inquiryGroup" />
</tab> </tabs>
動作のテスト
作成したアドインの動作をテストするために、デバッグ実行を行います。時前に、プロジェク トのデバッグ環境を確認しておきましょう。
[ソリューション エクスプローラー] から [WorkingWithDAML] プロジェクトを右クリ
ックし、[プロパティ] を選択します。
[デバッグ] タブを選択し、[外部プログラムの開始] がチェックされ、「<ArcGIS Pro イン
ストール フォルダー>\Pro\bin\ArcGISPro.exe」が参照されていることを確認します。
デバッグで使用するアプリケーションは、プロジェクト テンプレートによってあらかじめ定義さ れています。
[プロパティ] のダイアログを閉じます。
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
ビルドに問題がなければ、[デバッグ] メニュー から [デバッグ開始] を選択し、アドイン
を実行します。
しばらくすると、ArcGIS Pro が起動します。
[Map.aptx] テンプレートを選択し、新規にプロジェクトを作成します。プロジェクト名と
保存場所は下記のように設定してください。
名前 : CustomizeDAML
場所 : C:\ProSdkStartupGuide\Projects
プロジェクトが開くと、「Config.daml」ファイルで作成した「演習 2A タブ」が作成されて
いるのがわかります。
リボン インターフェイスに表示されている、「演習 2A タブ」を選択します。
タブ内に、「演習 2A グループ 1」と「演習 2A グループ 2」が作成されており、各グルー
35 ArcGIS Pro を閉じ、デバックを終了します。
ArcGIS Pro を終了すると、自動的にデバックが終了するようになっています。Visual Studio に戻
り、[デバッグ] メニューの [デバッグの停止] をクリックでもデバックは終了します。
マップ
タブの修正
ここまでのステップでは、insertModule 要素を使い、新規のタブやグループを作成し追加す
る方法を確認しました。このステップでは、updateModule 要素や updateGroup 要素を使用
して、ArcGIS Pro の既存のグループを変更し、コマンドを参照して追加や削除を行います。 updateModule 要素は、変更しようとしているモジュールを参照し、updateGroup 要素で既存
グループを参照します。
このステップでは、練習のため [マップ] タブの [ナビゲーション] グループから [ブックマ
ーク] ギャラリーを削除してみましょう。
「Config.daml」ファイル で insertModule 要素の終了タグの後に、下記のように updateModule 要素を追加します。
追加する要素 説明
updateModule ArcGIS Pro 上の更新するモジュールを定義
updateGroup updateModule で指定されたタブ内の、 更新するグループを定義
deleteButton updateGroup で指定されたグループ内の、 削除するボタンを定義
追加する既存コマンド 説明
esri_mapping_navigateGroup [ナビゲーション] グループ esri_mapping_bookmarksNavigateGallery [ブックマーク] ギャラリー
36
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
ビルドに問題がなければ、[デバッグ] メニューから [デバッグ開始] を選択し、アドイン
を実行します。
しばらくすると、ArcGIS Pro が起動します。
[最近使用したプロジェクト] または [別のプロジェクトを開く] から、下記のプロジェク
トを開きます
・C:\ProSdkStartupGuide\Projects\CustomizeDAML\CustomizeDAML.aptx
[ビュー] で [マップ] を選び、[マップ] タブの [ナビゲーション] グループから [ブック
マーク] ボタンがなくなっていることを確認します。
ArcGIS Pro を上書き保存し閉じて、デバックを終了します。
Visual Studio に戻ります。
コンディションとステートの作成
ArcGIS Pro SDK のフレームワークには、開発者によって定義された条件に基づいて、作成
したコマンドの有効化 / 無効化をトリガーするための、コンディションとステートというメカ
ニズムが組み込まれています。これによって、リボン、ドッキング ウィンドウ、ボタン、ツー ルといった様々な GUI 要素を、アプリケーション内でいつ使用可能にするかを決めることがで
きます。
「Config.daml」ファイルで、新規にコンディションとステートを定義します。
「Config.daml」ファイルで modules 要素の前に、condition 要素を追加します。
<conditions>
<!-- 追加するコンディションの定義 -->
<insertCondition id="example_state_condition" caption="演習 2A">
<!--このステートによって、コンディションは true か false で設定されます。-->
<state id="example_state" /> </insertCondition>
</conditions>
37
コンディションは、条件によって有効/無効を切り替えたい GUI の要素に関連付けて使用
します。コンディションが、関連付けられた GUI 要素の有効/無効どちらをトリガーするか
は、コンディションが内包する 1 つ以上のステートが持つ true/false の値によって決まり
ます。
上記コード例では、example_condition という ID を持つコンディションを定義し、その
最終的な値は内包する example_state ステートによって決まります。example_state の定
義はこれから作成しますが、まずは以下の操作にて、アドインに example_state の値を制御
するボタンを追加します。
[ソリューション エクスプローラー] から [WorkingWithDAML] プロジェクトを右クリ
ックし、[追加] → [新しい項目] を選択します。
[新しい項目の追加] ダイアログから、[インストール済み] → [Visual C#] → [ArcGIS]
→ [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro ボタン] テンプレートを選択します。
ArcGIS Pro SDK for .NET テンプレートの説明は、第 3 章で説明します。
名前を「ToggleStateButton.cs」に変更し、[追加] をクリックします。
プロジェクトに「ToggleStateButton.cs」ファイルが追加されます。DAML 定義では、 insertModule 要素配下の controls 要素に「ToggleStateButton」ボタン要素が追加されます。
また、groups 要素内の最初のグループにも「ToggleStateButton」ボタンへの参照が自動的に
追加されています。
38
タンの caption を「表示切替」に変更します。
controls 内に新規ボタンが作成されていない場合は、「Config.daml」ファイルを一度閉じて再度
開いてください。
<controls>
<!-- add your controls here -->
<button id="WorkingWithDAML_ToggleStateButton"
caption="表示切替" className="ToggleStateButton" ・・・>
「演習 2A グループ 1」の group 要素に移動し、自動的に追加された ToggleStateButton への参照を削除します。
<group id="WorkingWithDAML_Group1" caption="演習 2A グループ 1"
appearsOnAddInTab="false"> <!-- host controls within groups -->
<toolPalette refID="esri_mapping_newMapPalette" /> <button refID="esri_core_saveProjectAsButton" />
<gallery refID="esri_mapping_bookmarksNavigateGallery" /> <button refID="esri_mapping_mapContextMenu_ExportMap" /> <!--この↓コードをコメントアウト -->
<button refID="WorkingWithDAML_ToggleStateButton" size="large" /> </group>
次は、「ToggleStateButton」ボタンがクリックされた際にステートの値を更新する処理を記
述します。
「ToggleStateButton.cs」ファイルを右クリックし、[コードの表示] を選択し、ボタンの
クリック時に example_state ステートの有効/無効を切り替えるコードを追加します。
internal class ToggleStateButton : Button {
// 切り替える対象のステート ID を定数定義
public const string MyStateID = "example_state";
//ボタンのクリック イベントが起こったときの動作を定義
//表示の切り替えを Deactivate と Activate で指定
protected override void OnClick() { if (FrameworkApplication.State.Contains(MyStateID)) { FrameworkApplication.State.Deactivate(MyStateID); } else { FrameworkApplication.State.Activate(MyStateID); } } }
ステートを切り替えるコードの記述は以上です。
39 「Config.daml」ファイルを開きます。
ステップ 5 で作成した 「Config.daml」ファイルの updateGroup 要素に、作成したボ
タンを [ナビゲーション] グループに挿入するよう、下記の記述を追加します。
<updateGroup refID="esri_mapping_navigateGroup">
<deleteButton refID="esri_mapping_bookmarksNavigateGallery"/> <insertButton refID="WorkingWithDAML_ToggleStateButton"/> </updateGroup>
ボタンの ID は長くてタイプするのが大変です。同じ DAML 上に追加されているボタンの定義か
らコピー & ペーストで貼り付けましょう。
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
ここまでの手順で、コンディションおよびステートの定義、ボタンによるステートの更新まで ができました。
コンディションとステートを使用した表示の切り替え
こ のス テッ プで は、[演 習 2A タ ブ] タブ の 表 示状態 を、 ステ ップ 6 で作成 した example_state_condition コンディションで制御するための設定を行います。
「Config.daml」ファイルで tab 要素に移動し、condition 属性を追加します。
<tabs>
<tab id="WorkingWithDAML_Tab1" caption="演習 2A タブ"
condition="example_state_condition">
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
ビルドに問題がなければ、[デバッグ] メニューから [デバッグ開始] を選択してアドイン
を実行します。
しばらくすると、ArcGIS Pro が起動します。
[最近使用したプロジェクト] から、「CustomizeDAML.aprx」プロジェクトを開きます。
[マップ] タブ内の [ナビゲーション] グループに、[表示切替] ボタンが追加されているこ
とと、[演習 2A タブ] がリボン上に表示されていないことを確認しクリックします。
クリックをすると、[演習 2A タブ] が有効化され、リボン上に表示されます。再度、[表示切
40
ArcGIS Pro を閉じます
Visual Studio のデバック実行が終了します。
Visual Studio で [ファイル] メニュー → [すべて保存] をクリックします。
Visual Studio を終了します。
演習のまとめ
この演習では、insertModule 要素を使用し、新規のタブやグループを作成し追加する方法や、 updateModule や updateGroup 要素を使用し、ArcGIS Pro の既存のグループを変更し、コ
マンドを参照して追加や削除する方法、ボタンのクリックという 1 つのステートの条件をもと
にタブの表示を切り替えました。複数のステートを “and” や “or” といった要素を使い組み合
41
解答コード
Config.daml
...
<conditions>
<!-- 追加するコンディションの定義 -->
<insertCondition id="example_state_condition" caption="演習 2A">
<!--このステートによって、コンディションは true か false で設定されます。-->
<state id="example_state" /> </insertCondition>
</conditions>
<modules>
<insertModule id="WorkingWithDAML_Module"
className="Module1" autoLoad="false" caption="Module1"> <tabs>
<tab id="WorkingWithDAML_Tab1" caption="演習 2A タブ"
condition="example_state_condition"> <group refID="WorkingWithDAML_Group1" />
<group refID="WorkingWithDAML_Group2" /> <group refID="esri_mapping_inquiryGroup" /> </tab>
</tabs> <groups>
<group id="WorkingWithDAML_Group1"
caption="演習 2A グループ 1" appearsOnAddInTab="false">
<!--Pro の既存コマンド-->
<toolPalette refID="esri_mapping_newMapPalette" />
<button refID="esri_core_saveProjectAsButton" />
<gallery refID="esri_mapping_bookmarksNavigateGallery" /> <button refID="esri_mapping_mapContextMenu_ExportMap" />
<!--この↓コードをコメントアウト -->
<!--<button refID="working_with_DAML_ToggleStateButton"
size="large" />-->
</group>
<group id="WorkingWithDAML_Group2"
caption="演習 2A グループ 2" appearsOnAddInTab="false">
<!--Pro の既存コマンド-->
<toolPalette refID="esri_mapping_selectToolPalette" />
<button refID="esri_mapping_clearSelectionButton" />
<button refID="esri_geoprocessing_selectByAttributeButton" /> <button refID="esri_geoprocessing_selectByLocationButton" />
</group> </groups> <controls>
<button id="working_with_DAML_ToggleStateButton" caption="表示切替" className="ToggleStateButton"
loadOnClick="true" smallImage="Images¥GenericButtonBlue16.png" largeImage="Images¥GenericButtonBlue32.png">
<tooltip heading="Tooltip Heading">Tooltip text
<disabledText /></tooltip> </button> </controls> </insertModule> <updateModule refID="esri_mapping"> <groups> <updateGroup refID="esri_mapping_navigateGroup">
<deleteButton refID="esri_mapping_bookmarksNavigateGallery" /> <insertButton refID="WorkingWithDAML_ToggleStateButton"/> </updateGroup>
</groups> </updateModule>
42
</ArcGIS>
ToogleStateButton.cs
internal class ToggleStateButton : Button {
// 切り替える対象のステート ID を定数定義
public const string MyStateID = "example_state";
//ボタンのクリックイベントが起こったときの動作を定義
//表示の切り替えを Deactivate と Activate で指定
protected override void OnClick() {
if (FrameworkApplication.State.Contains(MyStateID))
{
FrameworkApplication.State.Deactivate(MyStateID); }
else {
FrameworkApplication.State.Activate(MyStateID); }
44
演習
2B:
フック
アドイン
コマンドの作成
この演習では、ArcGIS Pro の既存コマンドを取得し、その既存コマンドを新規に作成したボ
タンに参照させます。
演習時間: 20 分
演習のポイント :
フック アドイン コマンドの使用
GetPulgInWrapper で既存のコマンド ID を取得 新しいボタンに既存のコマンドを参照
リボンの作成
Visual studio 2015 を起動します。 [ファイル] メニュー → [新規作成] → [プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログから、[インストール済み] → [テンプレート] → [Visual C#] → [ArcGIS] → [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro モジュール
アドイン] テンプレートを選択します。
下記の項目を設定し [OK] ボタンをクリックしプロジェクトを新規に作成します。
.NET Framework のバージョン : .NET Framework 4.6.1 名前 : HookProCommands
場所 : C:\ProSdkStartupGuide\ProAddins\ ソリューションのディレクトリを作成 : チェックを外す
[ソリューション エクスプローラー] から「HookProCommands」プロジェクトを右クリ
ックし、[ArcGIS Pro の DAML ID を生成] をクリックします。
Daml.cs が作成されました。
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
「Config.daml」ファイルを開き、insertModule 要素配下の group 要素へ移動し、キャ
プションと appearsOnAddInTab の値を下記のように変更します。
45
<group id=”HookProCommands_Group1” caption=”演習 2B グループ”
appearsOnAddInTab=”false”>
次に、tabs 要素内に新規のタブを作成し、その中に [演習 2B グループ] グループへの参照
を追加します。
tabs 要素に移動します。
tab 要素のコメント化を解除し、caption 属性を「演習 2B タブ」に変更します。グルー
プへの参照は、テンプレートに既に記載されています。
caption : 演習 2B タブ
<tabs>
<tab id=”HookProCommands_Tab1” caption=”演習 2B タブ”>
<group refID=”HookProCommands_Group1”/> </tab>
</tabs>
フック
アドイン
ボタンの作成
次に、ボタンを 2 つ作成します。
[ソリューション エクスプローラー] の HookProCommands プロジェクトを右クリック
し、[追加] → [新しい項目] をクリックします。
[新しい項目の追加] ダイアログから、[インストール済み] → [Visual C#] → [ArcGIS]
→ [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro ボタン] テンプレートを選択します。
名前を「MyAddBookmarks.cs」に変更し、[追加] をクリックします。
「Config.daml」ファイル内の controls 内に、新規のボタンが作成されます。
もう一度、[ソリューション エクスプローラー] の HookProCommands プロジェクトを
右クリックし、[追加] → [新しい項目] をクリックします。
[新しい項目の追加] ダイアログから、[インストール済み] → [Visual C#] → [ArcGIS]
→ [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro ボタン] テンプレートを選択します。
名前を「MyCloseArcGISPro.cs」に変更し、[追加] をクリックします。
「Config.daml」ファイル内の controls 内に、新規に 2 つ目のボタンが作成されます。
「Config.daml」ファイルを開き、controls 内に新たに追加された 2 つのボタンが作成さ
れているかを確認します。
46
MyAddBookmarksButton
caption : ブックマーク 追加
tooltip heading : ブックマークを追加するボタンです。 MyCloseArcGISPro
caption : ArcGIS Pro 終了
tooltip heading : ArcGIS Pro を閉じるボタンです。
<controls>
<!-- add your controls here -->
<button id="HookProCommands_MyAddBookmarks"
caption="ブックマーク 追加" className="MyAddBookmarks"
loadOnClick="true" smallImage="Images¥GenericButtonBlue16.png" largeImage="Images¥GenericButtonBlue32.png">
<tooltip heading="ブックマークを追加するボタンです。">Tooltip
text<disabledText /></tooltip> </button>
<button id="HookProCommands_MyCloseArcGISPro"
caption="ArcGIS Pro 終了" className="MyCloseArcGISPro"
loadOnClick="true" smallImage="Images¥GenericButtonBlue16.png" largeImage="Images¥GenericButtonBlue32.png">
<tooltip heading="ArcGIS Pro を閉じるボタンです。">Tooltip
text<disabledText /></tooltip> </button>
</controls>
次に、作成したボタンにコードを記述します。
「MyAddBookmarks.cs」ファイルを開きます。
ArcGIS Pro ボタンのテンプレートで追加したクラスは ArcGIS.Desktop.Framework. Contracts.Button 抽象クラスを継承しており、クラス内には OnClick イベント ハンドラーを
オーバーライドしたメソッドが用意されています。OnClick() メソッド内に、ボタンがクリック
された際に実行するコードを記述します。
ここでは ArcGIS Pro に元々存在する [新しいブックマーク] ボタンと同じ動きをさせたい
ため、ブックマークを追加するコードを自分で書く代わりに [新しいブックマーク] ボタンへの
参照を取得し、実行することにします。既存コマンドへの参照は、FrameworkApplication ク
ラスの GetPlugInWrapper() 静的メソッドに、コマンドの ID を渡すことで取得できます。
OnClick() メソッド内に、[ブックマーク 追加] ボタンのクリックした際の動作を定義するコ
ードを記述します。
OnClick() メソッド内に、既存コマンドの [新しいブックマーク] ボタン の ID を追加し
ます。
protected override void OnClick() {
// GetPlugInWrapper で既存の ID を取得
IPlugInWrapper createBM = FrameworkApplication.
GetPlugInWrapper(DAML.Button.esri_mapping_createBookmark);
47
先の手順で Daml.cs ファイルを作成しておいたので、既存ボタンのコマンド ID を間違えやすい
文字列ではなく、DAML.Button.esri_mapping_createBookmark という文字定数で(Visual Studio の入力支援機能を利用して)入力できるようになっています。
GetPlugInWrapper() 戻り値の型は、IPlugInWrapper インターフェイスです。このインタ
ーフェイスを通して、DAML で定義されたリボン上のコントロールの定義(キャプションやア
イコンなど)にアクセスできますが、コマンドを実行させるためには Execute() コマンドを実
装した System.Windows.Input.ICommand インターフェイスにキャストする必要がありま
す。
ファイルの先頭(using 句の最後)に、ICommand を使うため System.Windows.Input
を追加します。
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
using System.Windows.Input;
取得したコマンドへの参照を ICommand にキャストし、実行可能な場合にのみコマンド
を起動するコードを記述します。
protected override void OnClick() {
// GetPlugInWrapper で既存の ID を取得
IPlugInWrapper createBM = FrameworkApplication.
GetPlugInWrapper(DAML.Button.esri_core_exitAplicationButton); // ICommand インターフェイスにキャスト
ICommand commandId = (ICommand)createBM;
if (commandId != null) {
// コマンドが実行可能かどうか判定
if (commandId.CanExecute(null)) {
// コマンド起動
commandId.Execute(null); }
}
}
ブックマークを追加するボタンの実装は以上です。
次は、クリックすると ArcGIS Pro アプリケーションを終了するボタンを実装します。こち
らも、既存の [ArcGIS Pro 終了] ボタンを参照して実行することにします。
「MyCloseArcGISPro.cs」ファイルを開きます。
ICommand を使うため、using 句に System.Windows.Input を追加します。
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
48
OnClick() メソッド内に、既存コマンドの [ArcGIS Pro 終了] ボタンの参照を取得し、実
行するコードを記述します。コード参照するコマンドの ID や、ローカルの変数名以外は、
先ほどのブックマークを追加するボタンとまったく同じコードになります。
protected override void OnClick() {
// GetPlugInWrapper で既存コマンドへの参照を取得
IPlugInWrapper exitApp = FrameworkApplication.
GetPlugInWrapper(DAML.Button.esri_core_exitApplicationButton);
// ICommand インターフェイスにキャスト
ICommand exitAppCmd = (ICommand)exitApp;
if (exitAppCmd != null) {
// コマンドが実行可能かどうか判定
if (exitAppCmd.CanExecute(null)) {
// コマンド起動
exitAppCmd.Execute(null); }
}
}
これで、ArcGIS Pro の既存機能を再利用する 2 つのボタンの実装ができました。動作を確
認してみましょう。
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま
す。
ビルドに問題がなければ、[デバッグ] メニューから [デバッグ開始] を選択し、アドイン
を実行します。
しばらくすると、ArcGIS Pro が起動します。
[最近使用したプロジェクト] から、演習 2A で作成した CustomizeDAML.aptx プロジェ
クトを開きます。
[演習 2B タブ] が追加されていることを確認し、選択します。
[演習 2B グループ] に、[ブックマーク 追加] と [ArcGIS Pro 終了] ボタンが追加されて
います。
49 マップを日本列島の範囲に拡大します。
[ブックマーク 追加] ボタンをクリックします。
[ブックマークの作成] ダイアログが表示され、新規にブックマークが作成できます。
[ブックマーク名] を「日本」に変更し、[OK] をクリックします。
[マップ] タブの [全体表示] ボタンをクリックします。
[表示切替] ボタンをクリックします。
非表示になっていた [演習 2A タブ] がリボン上に表示されます。
表示された [演習 2A タブ] を選択し、[ブックマーク] ボタンをクリックし、 [Map ブッ
クマーク] 内に、作成したブックマークの「日本」が追加されていることを確認しクリック
50
ブックマーク作成時のマップ範囲 (日本列島の範囲) に拡大されます。
[演習 2B タブ] に戻り、[ArcGIS Pro 閉じる] ボタンをクリックします。
[ArcGIS プロジェクト] ダイアログが表示されます。
[はい] を選択します。
ArcGIS Pro が終了します。
Visual Studio で [ファイル] メニューの [すべてを保存] をクリックし、Visual Studio
51
ArcGIS Pro
のアドインのアンインストール
インストールしたアドインは、簡単にアンインストールすることができます。ここでは、演習 でインストールされたアドインをアンインストールします。
ArcGIS Pro を開きます。
ArcGIS Pro の起動後、[最近使用したプロジェクト] から、CustomizeDAML.aprx プロジ
ェクトを開きます。
[プロジェクト] タブを選択します。
[プロジェクト] タブ内の [アドイン マネージャー] を選択します。
[マイ アドイン] から、「WorkingWithDAML」と「HookProCommands」を [このアドイ
ンを削除] をクリックし削除します。
ArcGIS Pro を閉じます。
アドインの追加および削除を有効にするには、アプリケーションの再起動が必要です。
これで ArcGIS Pro を立ち上げても、これまでの演習で追加したアドイン(演習 2A タブや
52
演習のまとめ
この演習では、フックアドイン コマンドを使用し、新規に作成したボタンに ArcGIS Pro の
既存コマンドを参照しました。また、追加したアドインのインストールもしました。
53
解答コード
Config.daml
...
<modules>
<insertModule id="HookProCommands_Module" className="Module1"
autoLoad="false" caption="Module1"> <!-- uncomment to have the control hosted on a separate tab--> <tabs>
<tab id="HookProCommands_Tab1" caption="演習 2B タブ">
<group refID="HookProCommands_Group1" /> </tab>
</tabs> <groups>
<group id="HookProCommands_Group1" caption="演習 2B グループ"
appearsOnAddInTab="false"> <!-- host controls within groups -->
<button refID="HookProCommands_MyAddBookmarks" size="large" /> <button refID="HookProCommands_MyCloseArcGISPro"
size="large" /> </group>
</groups> <controls>
<!-- add your controls here -->
<button id="HookProCommands_MyAddBookmarks"
caption="ブックマーク 追加" className="MyAddBookmarks"
loadOnClick="true" smallImage="Images¥GenericButtonBlue16.png" largeImage="Images¥GenericButtonBlue32.png">
<tooltip heading="ブックマークを追加するボタンです。">
Tooltip text<disabledText /></tooltip> </button>
<button id="HookProCommands_MyCloseArcGISPro"
caption="ArcGIS Pro 終了" className="MyCloseArcGISPro"
loadOnClick="true" smallImage="Images¥GenericButtonBlue16.png" largeImage="Images¥GenericButtonBlue32.png">
<tooltip heading="ArcGIS Pro を閉じるボタンです。">
Tooltip text<disabledText /></tooltip> </button> </controls> </insertModule> </modules> </ArcGIS> MyAddBookmarks.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ArcGIS.Desktop.Framework; using ArcGIS.Desktop.Framework.Contracts; using System.Windows.Input;
internal class MyAddBookmarks : Button {
protected override void OnClick() {
// GetPlugInWrapper で既存の ID を取得
IPlugInWrapper createBM = FrameworkApplication.